/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Biblioteca;

import java.util.ArrayList;

/**
 * Clase de la que heredan los elementos album, genero y artista. Todos tienen en común: nombre, array de canciones.
 */
public class ElementoBiblioteca {

    /**
     * Nombre del elemento.
     */
    protected String nombre;
    /**
     * Array de objetos Cancion de este elemento.
     */
    protected ArrayList<Cancion> canciones;

    /**
     * Constructora de la clase.
     */
    public ElementoBiblioteca() {
        this.canciones = new ArrayList<Cancion>();
        this.nombre = null;
    }

    /**
     * Constructora de la clase.
     * @param nombreElemento Nombre del elemento
     */
    public ElementoBiblioteca(String nombreElemento) {
        this.nombre = nombreElemento;
        this.canciones = new ArrayList<Cancion>();
    }

    /**
     * Añade una canción a la colección de este elemento.
     * @param cancion
     */
    public void addCancion(Cancion cancion) {
        this.canciones.add(cancion);
    }

    /**
     * Devuelve las canciones de este elemento en un ArrayList.
     * @return canciones de este artista.
     */
    public ArrayList<Cancion> getCanciones() {
        return this.canciones;
    }

    /**
     * Devuelve el nombre del elemento.
     * @return Cadena con el nombre
     */
    public String getNombre() {
        return this.nombre;
    }

    /**
     * Devuelve el nombre del elemento.
     * @return Cadena con el nombre
     */
    @Override
    public String toString() {
        return this.nombre;
    }

    /**
     * Codifica un String para evitar caracteres inválidos en el xml.
     * @param in String a codificar
     * @return String adecuado para xml.
     */
    public String encode(String in) {
        String out;
        out = in.replace("&", "-8a31-");
        out = out.replace("<", "-8b31-");
        out = out.replace(">", "-8c31-");
        out = out.replace("\"", "-8d31-");
        out = out.replace("'", "-8e31-");
        return out;
    }

    /**
     * Decodifica Strings codificados con encode().
     * @param in String codificado con encode()
     * @return String decodificado
     */
    public String decode(String in) {
        String out;
        out = in.replace("-8a31-", "&");
        out = out.replace("-8b31-", "<");
        out = out.replace("-8c31-", ">");
        out = out.replace("-8d31-", "\"");
        out = out.replace("-8e31-", "'");
        return out;
    }
}
